home *** CD-ROM | disk | FTP | other *** search
RISC OS BBC BASIC V Source | 1994-10-16 | 3.0 KB | 95 lines |
- > AddPathSrc
- fnm$="AddToPath"
- ;bl$=
- 0:cr$=
- 13:lfcr$=
- 10+cr$:tab$=
- 9:esc$=
- 27:hspc$=
- 1codesize=&1000:
- org codesize:L%=org+codesize
- A%=%1100
- %1110
- %0010
- ?P%=0:O%=org :
- So that addresses are offsets within module
- [OPT A%
- J; /E R0->command, R1->command tail, R12->1024 bytes workspace, R13 SP,
- ; R14 link,
- mode
- MOV R8,R14
- O MOV R11,#0 ; Load a handy zero into spare reg
- MOV R7,R1
- MOV R5,R1
- $.findarg2lp LDRB R14,[r5,#1]!
- CMP R14,#32
- " BGT findarg2lp
- STREQB R11,[r5]
- .findarg2lp2
- $ LDREQB R14,[r5,#1]!
- CMPEQ R14,#32
- # BEQ findarg2lp2
- = MOVLT PC,R8 ; No second arg!
- G MOV R4,#0 ; Don't expand into string
- D.itsanumber MOV R0,R7 ; Start of command line
- MOV R1,R12
- MOV R2,#1024
- MOV R3,#0
- ( SWI "XOS_ReadVarVal"
- !$ BVS needtocreate
- "N TEQ R4,#1 ; If some hacker has set xxx$Path
- #M
- Q R4,#3 ; to a number, convert to a string,
- $" BEQ itsanumber
- %? STRB R11,[R1,R2] ; Terminate string
- &/ ; R1->xxx$path, R5->path to add
- MOV R3,R5
- MOV R5,R1
- .complp MOV R0,R5
- *".despacelp LDRB R2,[R1],#1
- +; TEQ R2,#32 ; Strip spaces
- ," STRNEB R2,[R5],#1
- TEQ R2,#0
- . TEQNE R2,#
- /! BNE despacelp
- 0$ STRB R11,[R5,#-1]
- MOV R4,R3
- 2?.strcmplp LDRB R14,[R4],#1 ; strcmp r0 and r4
- 3" LDRB R6,[R0],#1
- 4!
- RS R10,R6,R14
- 5N
- Q PC,R8 ; Component already in path variable
- TEQ R6,R14
- 7 BEQ strcmplp
- TEQ R2,#0
- 9# STRNEB R2,[R5,#-1]
- BNE complp
- ;! MOV R14,#
- <B STRB R14,[R5,#-1] ; Need to add to path
- =#.copylp LDRB R14,[R3],#1
- CMP R14,#32
- ?# STRGTB R14,[R5],#1
- BGT copylp
- MOV R1,R12
- B .create STRB R11,[R5]
- MOV R0,R7
- D SUB R2,R5,R1
- MOV R3,#0
- F4 MOV R4,#2 ; Macro
- G' SWI "XOS_SetVarVal"
- MOV PC,R8
- .needtocreate
- MOV R1,R5
- L$.countlp LDRB R14,[R5,#1]!
- CMP R14,#32
- BGT countlp
- B create
- "Size = ";P%" bytes"
- "OS_File",&0A,fnm$,&FFC,,org,O%
- align
- next line allows shuffling of strings to reduce wastage
- 2)=0
- 3" byte(s) wasted by FNalign"
- 3:[OPTA%:EQUB0:]:
-